IOS Swift WKWebView使用以及与JS交互

您所在的位置:网站首页 ios webview js 交互 IOS Swift WKWebView使用以及与JS交互

IOS Swift WKWebView使用以及与JS交互

2023-04-20 02:49| 来源: 网络整理| 查看: 265

IOS Swift WKWebView使用以及与JS交互 原创

wx584411d751930 2020-05-03 17:30:41 博主文章分类:F-IOS ©著作权

文章标签 IOS Swift WKWebView WKWebView与JS交互 html ide 文章分类 JavaScript 前端开发

©著作权归作者所有:来自51CTO博客作者wx584411d751930的原创作品,请联系作者获取转载授权,否则将追究法律责任

一、Swift WKWebView使用

1、加载百度网站

打开xcode,在最上方工具栏新建project

IOS Swift WKWebView使用以及与JS交互_html

IOS Swift WKWebView使用以及与JS交互_WKWebView与JS交互_02

注意要选Storyboard

IOS Swift WKWebView使用以及与JS交互_html_03

工程建好后 ViewController.swift 这个文件是编写主视图文件,改成下面

import UIKit import WebKit class ViewController: UIViewController, WKUIDelegate { var webView:WKWebView! override func loadView() { let webConfiguration = WKWebViewConfiguration(); webView = WKWebView(frame: .zero, configuration: webConfiguration) webView.uiDelegate = self; view = webView; } override func viewDidLoad() { super.viewDidLoad() let myURL = URL(string:"https://www.baidu.com") let myRequest = URLRequest(url: myURL!) webView.load(myRequest) } }

点击运行模拟器

IOS Swift WKWebView使用以及与JS交互_WKWebView_04

网站加载成功 

IOS Swift WKWebView使用以及与JS交互_WKWebView与JS交互_05

2、直接加载html内容

override func viewDidLoad() { super.viewDidLoad() let content = "IOS WKWebview" webView.loadHTMLString(content, baseURL: nil) }

注意:如果html里要加载css,那么只有baseURL不是nil才会生效

3、加载本地HTML文件

新建web文件夹和html文件

IOS Swift WKWebView使用以及与JS交互_WKWebView_06

index.html

wkwebview WKWebview

这是一个段落

显示日期

index.css

h1 { color: red; } body { font-size: 4em; } button { font-size: 1em; }

index.js

function displayDate(){ document.getElementById("demo").innerHTML=Date(); }

同时Copy Bundle Resources里要追加三个文件

IOS Swift WKWebView使用以及与JS交互_html_07

加载html文件有两种写法:

法一:

let myURL = Bundle.main.url(forResource: "index", withExtension: "html") webView.load(URLRequest(url: myURL!))

法二:

let myPath = Bundle.main.path(forResource: "index", ofType: "html") let myURL = URL(fileURLWithPath: myPath!) webView.loadFileURL(myURL, allowingReadAccessTo: Bundle.main.bundleURL)

IOS Swift WKWebView使用以及与JS交互_IOS Swift_08

二、WKWebView调用JS

这里需要使用 webview 的 WKNavigationDelegate 代理在 webview 加载完成后调用 js 方法

import UIKit import WebKit class ViewController: UIViewController, WKNavigationDelegate { var webView:WKWebView! override func loadView() { let webConfiguration = WKWebViewConfiguration(); webView = WKWebView(frame: .zero, configuration: webConfiguration) webView.navigationDelegate = self; view = webView; } override func viewDidLoad() { super.viewDidLoad() let myURL = Bundle.main.url(forResource: "index", withExtension: "html") webView.load(URLRequest(url: myURL!)) } func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { webView.evaluateJavaScript("displayDate()") { (any, error) in if (error != nil) { print(error ?? "err") } } } }

IOS Swift WKWebView使用以及与JS交互_WKWebView与JS交互_09

三、JS调用Swift

ViewController.swift

import UIKit import WebKit // 注意:要引用 WKScriptMessageHandler class ViewController: UIViewController, WKNavigationDelegate, WKScriptMessageHandler { var webView:WKWebView! override func loadView() { let conf = WKWebViewConfiguration(); conf.userContentController.add(self, name: "yunan") webView = WKWebView(frame: .zero, configuration: conf) webView.navigationDelegate = self; view = webView; } override func viewDidLoad() { super.viewDidLoad() let myURL = Bundle.main.url(forResource: "index", withExtension: "html") webView.load(URLRequest(url: myURL!)) } func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { //判断消息通道 if(message.name == "yunan"){ print(message.body) } } }

index.js

function displayDate(){ // 向 swift 发送数据,这里的 yunan 就是 swift 中添加的消息通道的 name window.webkissageHandlers.yunan.postMessage({"msg":"hello world"}); }

点击按钮可以看到xcode打印log

IOS Swift WKWebView使用以及与JS交互_html_10

收藏 评论 分享 举报

上一篇:ubuntu 18.04找不到ens33

下一篇:Hadoop完全分布式 => 集群时间同步



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3